// miniprogram/pages/mainGame/index.js
const app=getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    count:[],// 全部玩家的所有信息
    currentScene:"",// 当前场景
    isMed:[],// 女巫是否还有药
    medType:-1// 女巫选择药物类型，0为解药，1为毒药，-1为不使用
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.index=0;// 当前场景的序号，如0是狼人时刻
    this.currentIndex=0;// 当前选中的玩家数量
    this.limit=0;// 当前可以选择的最大玩家数量
    this.secondSelect=false;// 当前回合对玩家的第二次确定
    this.currentDeadOne=null;// 今晚死亡的玩家
    this.isGuardOne=null;// 今晚是否选中要守卫的玩家(用于守卫牌阶段)
    let count=[];// 所有入夜可以睁眼的玩家，同data中的count
    const sceneArray=["狼人","女巫","守卫","预言家","猎人","白痴"];// 夜晚可以睁眼的角色，查询一次猎人
    if(!app.globalData.count.length){
      this.iconUrls=app.globalData.iconUrls.filter((item)=>{
        item.name==="猎人"&&item.count>0&&(app.globalData.isHunter=true);
        item.name==="白痴"&&item.count>0&&(app.globalData.isFool=true);
        if(item.count==1){
          count.push({
            selected:false,
            life:true,
            isDead:false,
            isPoison:false,
            isGuard:false,
          });
        }else if(item.count>1){
          for(let i=0;i<item.count;i++){
            count.push({
              selected:false,
              life:true,
              isDead:false,
              isPoison:false,
              isGuard:false,
            });
          }
        }
        return sceneArray.find((subItem)=>{
          return item.count&&subItem==item.name;
        });
      });  
    }else{
      count=app.globalData.count;
      this.iconUrls=app.globalData.iconUrl;
    }
    this.setData({
      count,
      currentScene:this.iconUrls[this.index].name,
      isMed:app.globalData.isMed,
    })
            
  },
  // 切换场景
  checkoutNext(){
    this.currentIndex=0;
    this.limit=0;
    this.secondSelect=false;
    this.isCurrentSelectEnd=false;
    const length=this.iconUrls.length;
    let len=null;
    if(app.globalData.day>0&&app.globalData.isHunter&&app.globalData.isFool){
      len=length-3;
    }else if(app.globalData.day>0&&(app.globalData.isHunter||app.globalData.isFool)){
      len=length-2;
    }else{
      len=length-1;
    }
      if(this.index==len){
        app.globalData.count=this.data.count;
        app.globalData.iconUrl=this.iconUrls;
        wx.reLaunch({
          url: './WhiteScene/index',
        })
      }else{
        this.setData({
          currentScene:this.iconUrls[++this.index].name
        })
      }
  },
  // 判定当前选定的对象
  selectPlayer(e){
    if(this.data.count[e.target.id].isDead)return;
    if(app.globalData.day>0){
      this.limit=1;
    }else{
      this.limit=this.limit||+this.iconUrls[this.index].count;
    }
    if(this.data.currentScene==="守卫"&&
    (app.globalData.day>0||this.secondSelect)&&
    +e.target.id===app.globalData.guardOne){
     return;
    }else if(this.data.count[e.target.id].selected){
      this.currentIndex--;
    }else if(this.limit!==this.currentIndex){
      this.currentIndex++;
    }else{
      return;
    }
    
    this.data.count[e.target.id].selected=!this.data.count[e.target.id].selected;
    const count=this.data.count;
    this.setData({
      count,
    });
  },
  // 女巫使用解药
  useAntidote(){
    if(this.data.isMed[0]||(!this.secondSelect&&!app.globalData.day))return;
    if(this.data.medType===0){
      this.data.medType=-1;
    }else{
      this.data.medType=0;
    }
    const medType=this.data.medType;
    this.setData({
      medType,
    })
  },
  //女巫使用毒药
  usePoison(){
    if(this.data.isMed[1]||(!this.secondSelect&&!app.globalData.day))return;
    if(this.data.medType===1){
      this.data.medType=-1;
    }else{
      this.data.medType=1
    }
    const medType=this.data.medType
    this.setData({
      medType,
    })
  },
  // 确认选定的目标
  comfirmRole(){
    if(app.globalData.day>0||this.secondSelect){
      switch(this.data.currentScene){
        case "狼人":
          const temp=this.data.count.map((item,index)=>{
            if(item.selected){
              item.life=!item.life;
              item.selected=!item.selected;
              this.currentDeadOne=index;
            }
            return item;
          })
          this.setData({
            count:temp
          })
          break;
        case "女巫":
        if(this.data.medType===0){
          if(this.currentDeadOne===null)return;
            this.data.count[this.currentDeadOne].life=!this.data.count[this.currentDeadOne].life;
            const count=this.data.count;
            app.globalData.isMed[this.data.medType]=true;
            this.setData({
              count
            })
          }else if(this.data.medType===1){
            app.globalData.isMed[this.data.medType]=true;
            const temp=this.data.count.map((item)=>{
              if(item.selected){
                item.isPoison=true;
                item.selected=!item.selected;
              }
              return item;
            })
            this.setData({
              count:temp
            })
          }
          break;
          case "守卫":
            const temp1=this.data.count.map((item,index)=>{
              if(item.selected){
                item.life=true;
                item.isGuard=true;
                item.selected=!item.selected;
                this.isGuardOne=index;          
              }
              return item;
            })
            if(this.isGuardOne!==null){
              app.globalData.guardOne=this.isGuardOne;
            }else{
              app.globalData.guardOne=null;
            }
            this.setData({
              count:temp1
            })
          break;
      }  
      this.checkoutNext();
    }else{
      const temp=this.data.count.map((item)=>{
        if(!item.role&&item.selected){
          item.role=this.data.currentScene;
          item.selected=!item.selected;
        }
        return item;
      })
      if(this.data.currentScene==="预言家"||this.data.currentScene==="猎人"||this.data.currentScene==="白痴"){
        this.checkoutNext();
      }else{
        this.currentIndex=0;
        this.limit=1;
        this.secondSelect=true;
      }
      this.setData({
        count:temp
      })
    }

  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})